<?php 
/**
 * Description of form
 * @author diotheos
 * @since 7 мая 2010
 */
class App_Form_User_Register extends Lib_Form_Clear{
	/**
	 * Initialization of form function
	 * 
	 * @since 7 мая 2010
	 * @author diotheos
	 * @return Zend_Form
	 */
	public function init(){
		parent::init();
		$this->setMethod('post');
		$this->setAction('');
		
		$email = new Zend_Form_Element_Text('email');
		
		$hostnameValidator = new Zend_Validate_Hostname();
		//$hostnameValidator->setAllow(Zend_Validate_Hostname::ALLOW_ALL);
		$hostnameValidator->setMessages(array(
		  Zend_Validate_Hostname::INVALID => _('Неправильный email'),
		  Zend_Validate_Hostname::INVALID_HOSTNAME => _('Неправильный email'),
		  Zend_Validate_Hostname::INVALID_DASH => _('Неправильный email'),
		  Zend_Validate_Hostname::INVALID_HOSTNAME_SCHEMA => _('Неправильный email'),
		  Zend_Validate_Hostname::INVALID_LOCAL_NAME => _('Неправильный email'),
		  Zend_Validate_Hostname::IP_ADDRESS_NOT_ALLOWED => _('Неправильный email'),
		  Zend_Validate_Hostname::LOCAL_NAME_NOT_ALLOWED => _('Неправильный email'),
		  Zend_Validate_Hostname::UNDECIPHERABLE_TLD => _('Неправильный email'),
		  Zend_Validate_Hostname::UNKNOWN_TLD => _('Неправильный email')
		));
		
		$emailValidator = new Zend_Validate_EmailAddress();
		$emailValidator->setHostnameValidator($hostnameValidator);
		$emailValidator->setMessages(array(
		  Zend_Validate_EmailAddress::INVALID => _('Неправильный email'),
		  Zend_Validate_EmailAddress::INVALID_FORMAT => _('Неправильный email'),
		  Zend_Validate_EmailAddress::INVALID_HOSTNAME => _('Неправильный email'),
		  Zend_Validate_EmailAddress::INVALID_LOCAL_PART => _('Неправильный email'),
		  Zend_Validate_EmailAddress::INVALID_MX_RECORD => _('Неправильный email'),
		  Zend_Validate_EmailAddress::INVALID_SEGMENT => _('Неправильный email'),
		  Zend_Validate_EmailAddress::LENGTH_EXCEEDED => _('Неправильный email')
		));
		
		$notEmptyValidator = new Zend_Validate_NotEmpty();
		$notEmptyValidator->setMessages(array(
		  Zend_Validate_NotEmpty::IS_EMPTY => _('Поле не может быть пустым')
		));
		
		$userExistsValidator = new Lib_Form_Validate_DbHasNotRecord('Automoto\User','email');
		$userExistsValidator->setMessages(array(
		  Lib_Form_Validate_DbHasNotRecord::ERROR_RECORD_FOUND => _('Пользователь с таким email уже зарегистрирован')
		));
		
		$email->setRequired()
		      ->setLabel(_('Мой Email'))
		      ->setAttrib('class', 'corner-all')
			  ->setFilters(array(
			  		'StringToLower',
			  		'StringTrim'
			  ))
			  ->addValidator($notEmptyValidator, true)
			  ->addValidator($emailValidator, true)
			  ->addValidator($userExistsValidator, true);
		$this->addElement($email);

		$password = new Zend_Form_Element_Password('password');
		$password->setLabel(_('Мой пароль'))
		         ->setRequired()
		         ->setAttrib('class', 'corner-all')
		         ->addValidator($notEmptyValidator, true)
		         ->addValidators(array(
                     array('stringLength', false, array(1,50)),
                     new Lib_Form_Validate_InputEquals('passwordConfirmation', _('Пароли не совпадают'))
                 ));
		$this->addElement($password);
		
		$passwordConfirmation = new Zend_Form_Element_Password('passwordConfirmation');
        $passwordConfirmation->setLabel(_('Мой пароль (повтор)'))
                             ->setDescription(_('Подтвердите введенный пароль'))
                             ->addValidator($notEmptyValidator, true)
                             ->addValidator(new Lib_Form_Validate_InputEquals('password', _('Пароли не совпадают')), true)
                             ->setRequired()
                             ->setAttrib('class', 'corner-all');
        
		$this->addElement($passwordConfirmation);
		
		$imgDir = "./assets/images/captcha/";
		
	   // check captcha path is writeable
        if (is_writable($imgDir)) {
        	
			    $captcha = new Zend_Form_Element_Captcha('antibot', array(
                    'label' => _('Введите цифры с изображения'),
                    'captcha' => 'Image',
                    'captchaOptions' => array(
                        'captcha' => 'Image',
                        'wordLen' => 4,
                        'timeout' => 300,
                        'imgDir' => $imgDir,
                        'imgUrl' => '/assets/images/captcha/',
                        'suffix' => '.c.png',
                        'font' => dirname(APPLICATION_PATH) . 
                                  "/assets/fonts/Aksent_Normal.ttf",
                    )
                ));
                
        } else {
            $captcha = new Zend_Form_Element_Captcha('antibot', array(
                    'label' => "Введите цифры с изображения",
                    'captcha' => 'Figlet',
                    'captchaOptions' => array(
                        'wordLen' => 6,
                        'timeout' => 300,
                    ),
                ));
        }
       
        $captcha->setAttrib('class', 'corner-all');
		$this->addElement($captcha);
        
		$submit = new Zend_Form_Element_Submit('register', array(
		  'label' => _('Зарегистрироваться'),
		  'decorators' => array('ViewHelper')
		));
		
		$submit->setAttrib('class', 'corner-all');
		
		$this->addElement($submit);
		
		$this->setDecorators(array(
            array('ViewScript', array('viewScript'=>'forms/user/register.phtml', 'class'=> 'form element'))
        ));
		return $this;
	}
}